iT邦幫忙

2023 iThome 鐵人賽

DAY 25
0
Software Development

Qt 6 跨平台應用程式開發系列 第 25

D25: Qt 檔案內容處理

  • 分享至 

  • xImage
  •  

今天要來介紹 Qt 的檔案處理功能。雖然 C++ 標準函式庫也有檔案處理的能力,但是在跨平台方面,特別是關於Unicode 檔案路徑的部份,一直有些微妙的問題。

這點 Qt 就處理的相當好,在跨平台以及各國語言的支援上,都領先標準函式庫而且相當完善。今天就介紹幾個檔案相關的基本類別

QFile

QFile 是最基本的檔案處理類別。

這裡示範的最基本的用法:

QFile file("in.txt");
if (file.open(QFile::ReadOnly | QFile::Text))
{
    while (!file.atEnd()) {
        QByteArray line = file.readLine();
        process_line(line);
    }
}

創建 QFile 物件的同時傳入檔案路徑,然後用 open() 函數開啟檔案的同時,指定使用目的(唯讀、讀寫、純文字或是二進位)。接著用 readLine() 來讀取內容,並且用 atEnd() 來檢查是否已經到達檔案結尾。

QFileInfo

QFileInfo 則是獲取檔案本身以外的各種資訊,像是檔名、副檔名、完整路徑、檔案大小、目錄等等的好用類別。

我們在D17: 看圖軟體(五) 狀態列 中就已經使用 QFileInfo 來獲取檔案的大小。

QTextStream

QTextStream 是特別用於讀取文字流的類別。通常搭配 QFile 使用,可以強化 QFile 貧弱的文字處理能力,而且會幫你搞定編碼問題。

逐行讀取文字檔的範例:

QFile f("input.txt");
if (f.open(QFile::ReadOnly | QFile::Text))
{
    QTextStream sin(&f);
    while(!sin.atEnd())
    {
        QString line = sin.readLine();
        ...
    }
}

除了讀取,也可以寫檔:

QFile f("output.txt");
if (f.open(QFile::WriteOnly | QFile::Truncate)) {
    QTextStream sout(&data);
    sout << "Result: " << 85 << " Degrees"; // 可用 operator<<
}

上一篇
D24: 如何閱讀  Qt 官方文件
下一篇
D26: Qt 讀寫 JSON 檔案
系列文
Qt 6 跨平台應用程式開發30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言